#ifndef BAZA
#define BAZA
#include <fstream>
#include "oddzial.h"
class fabryka;
class projekt;
class baza // baza=base
{
public:
	int ileFabryk; // count number of factories
	bool antyAt; // is this base protected against atomics
	noli <jednostka*> budynki; // buildings built in this base
	noli <fabryka> fabryki; //factories
	string nazwa; // name
	vector<int> sektory; // sectors
	unsigned int priorytet; // priority
	noli <projekt> projekty; // advanced projects being constructed
	int guarderow; //
	noli<budowlancy> oddzialyKons; // construction troops
	noli<bububu> oddzialyHub; //hubs

	obroncy oddzialObr; // defence troop
    IAICallback *cb;    //AI callback
    TTAICore *G; // main AI class
	int czyTrzeba(); // which factory need guarders
	bool dodajBaze(baza * doDodania); // merges bases
	bool dodajSektor (int ktory); // adds sector to this base
	void fabrykaZniszczona (int id, jednostka * jj); // factory destroyed
	int losowySektor(); // random sector belonging to this base
	projekt najblizszyProjekt (budowlancy * bb);
	void nowaFabryka (int id, jednostka * jj); // new factory finished
	void nowyProjekt(int uid, jednostka * jj) ; // new project created
	void piszProj();
	void projektSkonczony(int uid, jednostka * jj) ; // project finished
	void projektPrzerwany(int uid, jednostka * jj) ; // project destryed before finishing
	bool stworzOddzialHub(int id, jednostka * pierwszy);
	bool stworzOddzialKons(int id, jednostka * pierwszy); // creates new construction troop
	baza(IAICallback *callback,TTAICore *Gl, string opis); // c-tor
	~baza(); // d-tor
};
class projekt //projekt=project
{
public:
	TTAICore *G;
	IAICallback *cb;
    jednostka * pr;
	friend std::ostream & operator<<(std::ostream & wy, projekt proj);
	float3 pos; // position
	noli<int> liderzy;
	int type;
	projekt(TTAICore *g){G=g;cb=G->cb;}; //c-tor
	projekt(){}; // c-tor
};
class fabryka //fabryka=factory
{
public:
	friend bool operator==(int b,fabryka & a );
	TTAICore *G;
	IAICallback *cb;
    jednostka * pr;
	float3 pos; // position
	noli<jednostka*> guarderzy;
	fabryka(TTAICore *g){G=g;cb=G->cb;}; //c-tor
	fabryka(){}; // c-tor
};
#endif // BAZA
